"""
0. 导入socket
1. socket创建一个套接字
2. bind绑定ip和port
3. listen使套接字设置为被动模式
4. accept等待客户端的链接
5. recv/send接收发送数据
6. tcp关闭套接字
"""
# 0. 导入socket
from socket import *

# 1. socket创建一个套接字
tcp_server_socket = socket(AF_INET, SOCK_STREAM)

# 2. bind绑定ip和port 如果ip是空字符串，代表所有网卡的8888端口都监听数据
tcp_server_socket.bind(("", 8888))

# 3. listen使套接字设置为被动模式
# 参数表示：等待客户端的链接的最大数，只是Windows下生效。其他系统不限制
# 此时，socket套接字对象由主动连接模式变为被动模式，等待客户端接入
tcp_server_socket.listen(128)
print("--------------------服务器已开启，等待客户端链接--------------------")

# 4. accept等待客户端的链接(阻塞当前线程，有客户端连进来释放阻塞)
tcp_client, client_addr  = tcp_server_socket.accept()
print("有新的客户端接入：", client_addr)

# 5. recv/send接收发送数据 (会一直阻塞等待)
client_data = tcp_client.recv(2048)
print("收到来自客户端的数据:", client_data.decode("gbk"))

# 服务器回复客户端。 tcp_client
tcp_client.send("消息已收到".encode())

tcp_client.close()

# 6. tcp关闭套接字
tcp_server_socket.close()